package com.example.bigdata.spark.累加器

import org.apache.spark.{SparkConf, SparkContext}

object AccumulatorDemo {

    /**
      * Spark 2.0 + 对累加器进行了细分；
      *     * 长整数累加器
      *     * 双精度浮点数累加器
      *     * 集合累加器
      *     * 自定义累加器
      */
    def main(args: Array[String]): Unit = {
        val conf = new SparkConf()
                .setAppName("Accumulator Demo")
                .setMaster("local[1]")
        val sc = new SparkContext(conf)
        长整数累加器(sc)
        sc.stop()
    }

    def 长整数累加器(sc:SparkContext): Unit =
    {
        val rdd1 = sc.parallelize(Array(
            ("Bob",15),
            ("Thomas",28),
            ("Tom",18),
            ("Galen",35),
            ("Catalina",12),
            ("Karen",9),
            ("Boris",20)
        ),3)
        val visitorAccumulator = sc.longAccumulator("统计成年游客人数")
        rdd1.foreach( visitor => {
            if (visitor._2 > 18){
                visitorAccumulator.add(1)
            }
        })
        println(visitorAccumulator)
    }

}
